const mysql = require('mysql2/promise');
const bcrypt = require('bcryptjs');

async function createAdmin() {
    console.log('=================================');
    console.log('创建管理员账户');
    console.log('=================================\n');

    const config = {
        host: 'localhost',
        user: 'root',
        password: 'Lycc.2025',
        database: 'fun_english_db',
        charset: 'utf8mb4'
    };

    let connection;

    try {
        console.log('连接数据库...');
        connection = await mysql.createConnection(config);
        console.log('✅ 数据库连接成功\n');

        // 创建管理员表
        console.log('创建管理员相关表...');
        
        // 管理员表
        await connection.query(`
            CREATE TABLE IF NOT EXISTS admins (
                id INT AUTO_INCREMENT PRIMARY KEY,
                username VARCHAR(50) UNIQUE NOT NULL,
                password VARCHAR(255) NOT NULL,
                role ENUM('super_admin', 'admin', 'teacher') DEFAULT 'admin',
                permissions JSON COMMENT '权限配置',
                real_name VARCHAR(50),
                email VARCHAR(100),
                phone VARCHAR(20),
                status ENUM('active', 'inactive') DEFAULT 'active',
                last_login TIMESTAMP NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                INDEX idx_username (username),
                INDEX idx_status (status)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        `);

        // 管理员日志表
        await connection.query(`
            CREATE TABLE IF NOT EXISTS admin_logs (
                id INT AUTO_INCREMENT PRIMARY KEY,
                admin_id INT NOT NULL,
                action VARCHAR(50) NOT NULL COMMENT '操作类型',
                target_type VARCHAR(50) COMMENT '操作对象类型',
                target_id INT COMMENT '操作对象ID',
                details TEXT COMMENT '操作详情',
                ip_address VARCHAR(50),
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                FOREIGN KEY (admin_id) REFERENCES admins(id) ON DELETE CASCADE,
                INDEX idx_admin (admin_id),
                INDEX idx_action (action),
                INDEX idx_created (created_at)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        `);

        console.log('✅ 管理员表创建成功\n');

        // 检查是否已存在admin账户
        const [existing] = await connection.query(
            'SELECT id FROM admins WHERE username = ?',
            ['admin']
        );

        if (existing.length > 0) {
            console.log('⚠️  管理员账户已存在，跳过创建\n');
        } else {
            // 加密密码
            console.log('加密管理员密码...');
            const hashedPassword = await bcrypt.hash('admin123', 10);
            
            // 超级管理员权限
            const permissions = {
                user_management: true,      // 用户管理
                content_management: true,   // 内容管理（单词、成就）
                data_analysis: true,        // 数据分析
                system_settings: true,      // 系统设置
                admin_management: true      // 管理员管理
            };

            // 插入超级管理员
            await connection.query(
                `INSERT INTO admins (username, password, role, real_name, permissions, status) 
                 VALUES (?, ?, ?, ?, ?, ?)`,
                ['admin', hashedPassword, 'super_admin', '系统管理员', JSON.stringify(permissions), 'active']
            );

            console.log('✅ 超级管理员创建成功\n');
        }

        // 显示管理员信息
        const [admins] = await connection.query('SELECT id, username, role, real_name, status, created_at FROM admins');
        
        console.log('=================================');
        console.log('当前管理员列表：');
        console.log('=================================');
        admins.forEach(admin => {
            console.log(`  ID: ${admin.id}`);
            console.log(`  用户名: ${admin.username}`);
            console.log(`  角色: ${admin.role}`);
            console.log(`  姓名: ${admin.real_name || '未设置'}`);
            console.log(`  状态: ${admin.status}`);
            console.log(`  创建时间: ${admin.created_at}`);
            console.log('  ---------------------------------');
        });

        console.log('\n=================================');
        console.log('✅ 管理员系统初始化完成！');
        console.log('=================================');
        console.log('\n登录信息：');
        console.log('  用户名: admin');
        console.log('  密码: admin123');
        console.log('\n管理员权限：');
        console.log('  ✓ 用户管理 - 查看、编辑、删除用户');
        console.log('  ✓ 内容管理 - 管理单词、成就');
        console.log('  ✓ 数据分析 - 查看统计数据、生成报表');
        console.log('  ✓ 系统设置 - 配置系统参数');
        console.log('  ✓ 管理员管理 - 创建、管理其他管理员');
        console.log('=================================\n');

    } catch (error) {
        console.error('❌ 错误:', error.message);
        process.exit(1);
    } finally {
        if (connection) {
            await connection.end();
        }
    }
}

createAdmin();

